@基素 2021
大きいので切り出した基素.icon
s/現弾/現段階
ありがとうございます基素.icon
s/保王的/法的
ありがとうございます基素.icon
センターの倫理経済しかわかりませんが、全部年号ではなく出来事の順番を答えるよう出題されてますねtakker.icon
問題を作成してる大学教授陣も、多分流れを知っていることを重視しているのだと思います
良さそう基素.icon
中学高校で歴史をやった時に年号を記憶しまくった覚えがあります
例
https://gyazo.com/37278b14f4ca908a92857a0eb4eab651
from 大学入試センター試験 平成31年度本試験 政治経済 p.89
s/過大/課題
ありがとうございます基素.icon
すごい基素.icon
pixiv開発者はこういう網の目をかいくぐることをされたくないと思うので、余り表に出さないほうがいいのかもしれませんが、ひとまず突破できることを示すコードを載せておきます
pixiv開発者の意図はセキュリティ目的だと思うので、多分保存対策は意図されていないと思います基素.icon
なるほ。保存対策目的じゃなければ問題なさそうですねtakker.icon
右クリックで保存できますもんね基素.icon
そう言えば「名前を付けて画像を保存」は普通にできてたtakker.icon
そもそも保存対策だったらEagleがアウトになる
Gyazoは画像保存時に再リクエストして、それがサーバー側のセキュリティ向けのレスポンスによってブラウザがブロックしてこけてる、みたいな感じでした基素.icon
pixivへのGETがこけていた記憶があります基素.icon
なるほど基素.icon
pixiv以外もこのheaderをつけるようになったら問題が表面化しそう基素.icon
と書いてたけど、適切なheaderをみると原因はrefererの設定が漏れることだ毛なのかな?
code:user.js
// ==UserScript==
// @name pixiv-proxy
// @version 0.1.1
// @description pixivのデータ取得テスト
// @author takker
// @connect i.pximg.net
// @connect upload.gyazo.com
// @grant GM_xmlhttpRequest
// @license MIT
// @copyright Copyright (c) 2021 takker
// ==/UserScript==
"use strict"
function fetchImage(url) {
return new Promise((resolve, reject) => GM_xmlhttpRequest({
method: "GET",
url,
onload: ({response}) => resolve(response),
onerror: (e) => reject(e),
withCredentials: true,
responseType: 'blob',
}));
}
async function uploadToGyazo(image, {
accessToken,
title, // optional
refererURL, // optional
description, // optional
created, // optional
}) {
const formData = new FormData();
formData.append('imagedata', image);
formData.append('access_token', accessToken);
if (refererURL || location?.href) formData.append('referer_url', refererURL ?? location.href);
if (title) formData.append('title', title);
if (description) formData.append('desc', description);
if (created) formData.append('created_at', created);
const json = await new Promise((resolve, reject) => GM_xmlhttpRequest({
method: "POST",
data: formData,
onload: ({response}) => resolve(response),
onerror: (e) => reject(e),
withCredentials: true,
responseType: "json",
}));
return json;
}
unsafeWindow.fetchImage = fetchImage;
unsafeWindow.uploadToGyazo = uploadToGyazo;
上記のコードをTamperMonkeyにinstallした後、開発コンソールで以下を実行して下さい
IMAGE_URL: pixivから取得したいイラストのURL
i.pximg.netで始まるURL
YOUR_ACCESS_TOKEN: Gyazoのaccess token
code:js
(async () => {
const blob = await fetchImage("IMAGE_URL");
const {permalink_url} = await uploadToGyazo(blob, {
accessToken: "YOUR_ACCESS_TOKEN",
});
window.open(permalink_url);
})();
TamperMonkeyの右クリックメニューでは無理でした
クリックした画像データを取得する方法が存在しない
web browser拡張機能として別途作るしかなさそうです
ありがとうございます基素.icon
GyazoがGETで取り直してるのは、なにか理由があるのかな?基素.icon
画像保存時の再リクエストのことでしたら、<img>タグから画像データを取り出す方法がないからでしょうtakker.icon
なるほど。取れないんですね基素.icon
2022-01-22 09:52:48 できちゃったtakker.icon
すごい基素.icon
YOUR_ACCESS_TOKENにGyazoのaccess tokenを入れてください
画像を右クリックすると、Gyazoに送信してURLをクリップボードに貼り付けます
code:pixiv-to-gyazo.js
// ==UserScript==
// @name pixiv-to-gyazo
// @version 0.1.0
// @description pixivの画像をGyazoに送る
// @author takker
// @connect i.pximg.net
// @connect upload.gyazo.com
// @grant GM_xmlhttpRequest
// @license MIT
// @copyright Copyright (c) 2022 takker
// ==/UserScript==
const YOUR_ACCESS_TOKEN = "YOUR_ACCESS_TOKEN";
function fetchImage(url) {
return new Promise((resolve, reject) =>
GM_xmlhttpRequest({
method: "GET",
url,
onload: ({ response }) => resolve(response),
onerror: (e) => reject(e),
withCredentials: true,
responseType: "blob",
})
);
}
async function uploadToGyazo(image, {
accessToken,
title, // optional
refererURL, // optional
description, // optional
created, // optional
}) {
const formData = new FormData();
formData.append("imagedata", image);
formData.append("access_token", accessToken);
if (refererURL || location?.href) {
formData.append("referer_url", refererURL ?? location.href);
}
if (title) formData.append("title", title);
if (description) formData.append("desc", description);
if (created) formData.append("created_at", created);
const json = await new Promise((resolve, reject) =>
GM_xmlhttpRequest({
method: "POST",
data: formData,
onload: ({ response }) => resolve(response),
onerror: (e) => reject(e),
withCredentials: true,
responseType: "json",
})
);
return json;
}
function makeMesageWindow(gyazoURL) {
const div = document.createElement("div");
div.style.display = "block";
div.style.boxSizing = "border-box";
div.style.position = "fixed";
div.style.top = "0";
div.style.right = "0";
div.style.zIndex = "2147483647";
div.style.backgroundColor = "#e8e8e8";
div.style.color = "#4d4d4d";
div.style.border = "1px solid #ccc"; div.style.borderTop = "none";
const text = document.createElement("div");
text.textContent = "Copied to Clipboard.";
const img = document.createElement("img");
img.src = ${gyazoURL.toString()}/max_size/1000;
img.style.maxWidth = "20vw";
img.style.padding = "5px";
div.append(text);
div.append(img);
return div;
}
addEventListener("contextmenu", async (e) => {
const img = e.target;
if (!(img instanceof HTMLImageElement)) return;
const url = new URL(img.src);
if (url.hostname !== "i.pximg.net") return;
e.preventDefault();
e.stopPropagation();
const blob = await fetchImage(url.href);
try {
const { permalink_url } = await uploadToGyazo(blob, {
accessToken: YOUR_ACCESS_TOKEN,
title: document.title,
});
await navigator.clipboard.writeText(permalink_url);
const div = makeMesageWindow(permalink_url);
document.body.append(div);
setTimeout(() => div.remove(), 2000);
} catch(e) {
console.error(e);
alert(Failed to get the image:\n${e.name} ${e.message});
}
});
アニメ的なデフォルメの話からはズレますが、↓の作例はかなり2Dに馴染んでいるなーと思いましたimo.icon
歪みは無いですがリグ入れ・レンダリングはかなり凝っていると思います
ありがとうございます基素.icon
productionの事例ではないですが多分上のツイートを見てblender使いの方が揺らしてましたw
なんと!wimo.icon
この出典、おそらく数学ガールシリーズからかなと思いました
数学ガール内だと《例示は理解の試金石》となっています
数学ガールでもあるのですが、もっと以前に数学書で見たんですよね。数学者が書いているテキストだったので意外におもったのをおぼえています 基素.icon
夜が多分誤字だと思うのですが、訂正方法がちょっとわからないです
「世」が正解でした基素.icon𝙩𝙝𝙖𝙣𝙠 𝙮𝙤𝙪...
どもです(え、なにこの字体。文字装飾記法じゃない?)takker.icon
Unicodeであるらしいです。Twitterとかでたまにみます基素.icon
/Icons2/へえ〜.icon/icons/なるほど.icontakker.icon
s/焼失/消失
どもども基素.icon
リンク切れです
ありがとうございます!差し替えました基素.icon
web.archive.orgにもありましたtakker.icon
「見てしまいました」→「わざわざ魚拓リンクをはってもらっていたのに気づかず、自分で見つけて差し替えてしまいました」という意味でした基素.icon
あーなるほどwtakker.icon
「ブラウザ拡張で見つからなかったのでそのままにしていた」と誤読してました
蛇口の形状があわない(と思っている)んですよね基素.icon
ありがとうございます!基素.icon